package cn.iocoder.yudao.module.design.service.relativednc;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.design.controller.admin.relativednc.vo.*;
import cn.iocoder.yudao.module.design.dal.dataobject.relativednc.RelativedNcDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 关联人表请求 Service 接口
 *
 * @author 芋道源码
 */
public interface RelativedNcService {

    /**
     * 创建关联人表请求
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRelativedNc(@Valid RelativedNcCreateReqVO createReqVO);

    /**
     * 更新关联人表请求
     *
     * @param updateReqVO 更新信息
     */
    void updateRelativedNc(@Valid RelativedNcUpdateReqVO updateReqVO);

    /**
     * 删除关联人表请求
     *
     * @param id 编号
     */
    void deleteRelativedNc(Long id);

    /**
     * 获得关联人表请求
     *
     * @param id 编号
     * @return 关联人表请求
     */
    RelativedNcDO getRelativedNc(Long id);

    /**
     * 获得关联人表请求列表
     *
     * @param ids 编号
     * @return 关联人表请求列表
     */
    List<RelativedNcDO> getRelativedNcList(Collection<Long> ids);

    /**
     * 获得关联人表请求分页
     *
     * @param pageReqVO 分页查询
     * @return 关联人表请求分页
     */
    PageResult<RelativedNcDO> getRelativedNcPage(RelativedNcPageReqVO pageReqVO);

    /**
     * 获得关联人表请求列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 关联人表请求列表
     */
    List<RelativedNcDO> getRelativedNcList(RelativedNcExportReqVO exportReqVO);


    /**
     * 获得关联人表请求列表
     *

     * @return 关联人表请求列表
     */
    List<Map> getRelativedNcListByUserId( );
    /**
     * 获得关联人表请求去重列表
     *
     * @throws
     */
    List<Map> getRelativedNcReqListByUserId( );

    /**
     * 校验关联人表同意 处理中 请求是否存在
     */
    int checkUserRelNcExists(String relId, String roleId) ;
    /**
     * 查询状态集合
     * @author Annie
     * @time 2023/9/27 17:21
     * @param[1] relId  关联人id
     * @param[2] roleId  关联人角色
     * @return Set<Integer>  statusList
     * @throws
     */
    Set<Integer> getUserRelStatusList(String relId, String roleId) ;


    void dealRelativedNc(RelativedNcDealVO vo);



}
